﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WTwitter.Model.UserData;
using WTwitter.Model.Framework;

namespace WTwitter.Model.Filters {
	/// <summary>
	/// アイテムのIDに対してフィルタリングするクラス
	/// </summary>
	sealed class NgFilterById : Filter {
		#region static member
		/// <summary>
		/// 共通フィルタのインスタンス
		/// ※共通のフィルタはこのプロパティを通じて設定、取得する
		/// ※シングルトンではないので、タイムラインごとに固有のIDフィルタを持つ場合は別途インスタンス化できる
		/// </summary>
		public static NgFilterById Common { get; private set; }

		static NgFilterById() {
			Common = new NgFilterById(new string[]{});
		}
		#endregion

		#region private member
		private List<string> _ngList;
		#endregion

		/// <summary>
		/// コンストラクタ
		/// </summary>
		/// <param name="ngList">インスタンス化時に登録するNGワードのリスト</param>
		public NgFilterById(IEnumerable<string> ngList) {
			_ngList = new List<string>(ngList);
		}

		#region Public Member
		/// <summary>
		/// フィルタにNGワードを追加
		/// </summary>
		/// <param name="ngWord"></param>
		public void AddNg(string ngWord) {
			_ngList.Add(ngWord);
			OnFilterAdded();
		}

		/// <summary>
		/// フィルタからNGワードを削除
		/// </summary>
		/// <param name="ngWord"></param>
		public void RemoveNg(string ngWord) {
			_ngList.Remove(ngWord);
			OnFilterRemoved();
		}
		#endregion

		#region INgFilter メンバ

		override public bool Judge(ITimelineItem target) {
			if (_ngList.Contains(target.User.ScreenName)) {
				return false;
			}
			return true;
		}

		#endregion
	}
}
